home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / UTIL / TouchMe 1.1.1.sit / touchMe 1.11 Folder / CW9 PP source / source / Common / UFileInfo.cp < prev    next >
Text File  |  1996-08-08  |  6KB  |  267 lines

  1. // ==================================================
  2. //    UFileInfo.cp
  3. //    Copyright (C) 1994-96 Mizutori Tetsuya, March 9 1994, July 4 1996.
  4. // ==================================================
  5. //    All documents are pretty-printed in Geneva 10-point font.
  6.  
  7. #include <Files.h>
  8.  
  9. #include <UMemoryMgr.h>
  10. #include <UDebugging.h>
  11.  
  12. #include "UFileInfo.h"
  13. #include "UErrorMessage.h"
  14.  
  15.  
  16. // --------------------------------------------------
  17. //        ・ GetSpecType
  18. // --------------------------------------------------
  19.  
  20. EFileSpecType
  21. UFileInfo::GetSpecType(
  22.     FSSpec &    inFSSpec )
  23. {
  24.     CInfoPBRec    pb;
  25.     EFileSpecType    theSpecType;
  26.     OSErr        err;
  27.  
  28.     if ( (inFSSpec.parID) == fsRtParID )
  29.         theSpecType = fileType_Volume;
  30.     else {
  31.         pb.hFileInfo.ioNamePtr    = inFSSpec.name;
  32.         pb.hFileInfo.ioVRefNum    = inFSSpec.vRefNum;
  33.         pb.hFileInfo.ioDirID        = inFSSpec.parID;
  34.         pb.hFileInfo.ioFDirIndex    = 0;
  35.  
  36.         err = ::PBGetCatInfoSync( &pb );
  37.         UErrorMessage::NofityIfOSErr(err,false);
  38.  
  39.         if ( err == noErr ) {
  40.             if ( (pb.hFileInfo.ioFlAttrib & 0x10) != 0 )
  41.                 theSpecType = fileType_Folder;
  42.             else
  43.                 theSpecType = fileType_File;
  44.         }
  45.     }
  46.  
  47.     return theSpecType;
  48. }
  49.  
  50.  
  51. // --------------------------------------------------
  52. //        ・ TouchDir
  53. // --------------------------------------------------
  54.  
  55. OSErr
  56. UFileInfo::TouchDir(
  57.     const short        vRefNum,
  58.     const long        dirID )
  59. {
  60.     CInfoPBRec    pb;
  61.     Str255        theFilename;
  62.     OSErr        err;
  63.  
  64.     pb.dirInfo.ioDrDirID    = dirID;
  65.     pb.dirInfo.ioVRefNum    = vRefNum;
  66.     pb.dirInfo.ioNamePtr    = theFilename;
  67.     pb.dirInfo.ioFDirIndex    = -1;
  68.  
  69.     err = ::PBGetCatInfoSync( &pb );
  70.     UErrorMessage::NofityIfOSErr(err,false);
  71.  
  72.     if ( err == noErr ) {
  73.         pb.dirInfo.ioCompletion    = 0;
  74.         pb.dirInfo.ioDrDirID        = pb.dirInfo.ioDrParID;
  75.         pb.dirInfo.ioFDirIndex        = 0;
  76.         ::GetDateTime( &pb.dirInfo.ioDrMdDat );
  77.  
  78.         err = ::PBSetCatInfoSync( &pb );
  79.         UErrorMessage::NofityIfOSErr(err,false);
  80.     }
  81.  
  82.     return err;
  83. }
  84.  
  85.  
  86. // --------------------------------------------------
  87. //        ・ GetFSSpecDateTime
  88. // --------------------------------------------------
  89.  
  90. OSErr
  91. UFileInfo::GetFSSpecDateTime(
  92.     FSSpec &        inFSSpec,
  93.     unsigned long &    outCreationDate,
  94.     unsigned long &    outModificationDate )
  95. {
  96.     OSErr    err;
  97.  
  98.     if ( GetSpecType( inFSSpec ) == fileType_File ) {
  99.         err = GetFileDateTime( inFSSpec, outCreationDate, outModificationDate );
  100.     } else {
  101.         err = GetFolderDateTime( inFSSpec, outCreationDate, outModificationDate );
  102.     }
  103.  
  104.     return err;
  105. }
  106.  
  107.  
  108. // --------------------------------------------------
  109. //        ・ SetFSSpecDateTime
  110. // --------------------------------------------------
  111.  
  112. OSErr
  113. UFileInfo::SetFSSpecDateTime(
  114.     FSSpec &        inFSSpec,
  115.     unsigned long    inCreationDate,
  116.     unsigned long    inModificationDate )
  117. {
  118.     OSErr    err;
  119.  
  120.     if ( GetSpecType( inFSSpec ) == fileType_File ) {
  121.         err = SetFileDateTime( inFSSpec, inCreationDate, inModificationDate );
  122.     } else {
  123.         err = SetFolderDateTime( inFSSpec, inCreationDate, inModificationDate );
  124.     }
  125.  
  126.     TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
  127.     ::FlushVol( nil, inFSSpec.vRefNum );
  128.  
  129.     return err;
  130. }
  131.  
  132.  
  133. // --------------------------------------------------
  134. //        ・ GetFileDateTime
  135. // --------------------------------------------------
  136.  
  137. OSErr
  138. UFileInfo::GetFileDateTime(
  139.     FSSpec &        inFSSpec,
  140.     unsigned long &    outCreationDate,
  141.     unsigned long &    outModificationDate )
  142. {
  143.     CInfoPBRec    pb;
  144.     HFileInfo*        theFInfo = (HFileInfo *) &pb;
  145.     OSErr        err;
  146.  
  147.     theFInfo->ioNamePtr    = inFSSpec.name;
  148.     theFInfo->ioVRefNum    = inFSSpec.vRefNum;
  149.     theFInfo->ioDirID    = inFSSpec.parID;
  150.     theFInfo->ioFDirIndex    = 0;
  151.  
  152.     err = ::PBGetCatInfoSync( (CInfoPBPtr) theFInfo );
  153.     UErrorMessage::NofityIfOSErr(err,false);
  154.  
  155.     outCreationDate        = theFInfo->ioFlCrDat;
  156.     outModificationDate    = theFInfo->ioFlMdDat;
  157.  
  158.     return err;
  159. }
  160.  
  161.  
  162. // --------------------------------------------------
  163. //        ・ SetFileDateTime
  164. // --------------------------------------------------
  165.  
  166. OSErr
  167. UFileInfo::SetFileDateTime(
  168.     FSSpec &        inFSSpec,
  169.     unsigned long    inCreationDate,
  170.     unsigned long    inModificationDate )
  171. {
  172.     CInfoPBRec    pb;
  173.     HFileInfo*        theFInfo = (HFileInfo *) &pb;
  174.     OSErr        err;
  175.  
  176.     theFInfo->ioNamePtr    = inFSSpec.name;
  177.     theFInfo->ioVRefNum    = inFSSpec.vRefNum;
  178.     theFInfo->ioDirID    = inFSSpec.parID;
  179.     theFInfo->ioFDirIndex    = 0;
  180.  
  181.     err = ::PBGetCatInfoSync( (CInfoPBPtr) theFInfo );
  182.     UErrorMessage::NofityIfOSErr(err,false);
  183.  
  184.     theFInfo->ioNamePtr    = inFSSpec.name;
  185.     theFInfo->ioVRefNum    = inFSSpec.vRefNum;
  186.     theFInfo->ioDirID    = inFSSpec.parID;
  187.     if ( inCreationDate != 0 )        theFInfo->ioFlCrDat    = inCreationDate;
  188.     if ( inModificationDate != 0 )    theFInfo->ioFlMdDat    = inModificationDate;
  189.  
  190.     err = ::PBSetCatInfoSync( (CInfoPBPtr) theFInfo );
  191.     UErrorMessage::NofityIfOSErr(err,false);
  192.  
  193.     //TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
  194.     //::PBFlushFileSync( (ParmBlkPtr) theFInfo );
  195.  
  196.     return err;
  197. }
  198.  
  199.  
  200. // --------------------------------------------------
  201. //        ・ GetFolderDateTime
  202. // --------------------------------------------------
  203.  
  204. OSErr
  205. UFileInfo::GetFolderDateTime(
  206.     FSSpec &        inFSSpec,
  207.     unsigned long &    outCreationDate,
  208.     unsigned long &    outModificationDate )
  209. {
  210.     CInfoPBRec    pb;
  211.     DirInfo*        theVInfo = (DirInfo *) &pb;
  212.     OSErr        err;
  213.  
  214.     theVInfo->ioNamePtr    = inFSSpec.name;
  215.     theVInfo->ioVRefNum    = inFSSpec.vRefNum;
  216.     theVInfo->ioDrDirID    = inFSSpec.parID;
  217.     theVInfo->ioFDirIndex    = 0;
  218.  
  219.     err = ::PBGetCatInfoSync( (CInfoPBPtr) theVInfo );
  220.     UErrorMessage::NofityIfOSErr(err,false);
  221.  
  222.     outCreationDate        = theVInfo->ioDrCrDat;
  223.     outModificationDate    = theVInfo->ioDrMdDat;
  224.  
  225.     return err;
  226. }
  227.  
  228.  
  229. // --------------------------------------------------
  230. //        ・ SetFolderDateTime
  231. // --------------------------------------------------
  232.  
  233. OSErr
  234. UFileInfo::SetFolderDateTime(
  235.     FSSpec &        inFSSpec,
  236.     unsigned long    inCreationDate,
  237.     unsigned long    inModificationDate )
  238. {
  239.     CInfoPBRec    pb;
  240.     DirInfo*        theVInfo = (DirInfo *) &pb;
  241.     OSErr        err;
  242.  
  243.     theVInfo->ioNamePtr    = inFSSpec.name;
  244.     theVInfo->ioVRefNum    = inFSSpec.vRefNum;
  245.     theVInfo->ioDrDirID    = inFSSpec.parID;
  246.     theVInfo->ioFDirIndex    = 0;
  247.  
  248.     err = ::PBGetCatInfoSync( (CInfoPBPtr) theVInfo );
  249.     UErrorMessage::NofityIfOSErr(err,false);
  250.  
  251.     theVInfo->ioNamePtr    = inFSSpec.name;
  252.     theVInfo->ioVRefNum    = inFSSpec.vRefNum;
  253.     theVInfo->ioDrDirID    = inFSSpec.parID;
  254.     if ( inCreationDate != 0 )        theVInfo->ioDrCrDat    = inCreationDate;
  255.     if ( inModificationDate != 0 )    theVInfo->ioDrMdDat    = inModificationDate;
  256.  
  257.     err = ::PBSetCatInfoSync( (CInfoPBPtr) theVInfo );
  258.     UErrorMessage::NofityIfOSErr(err,false);
  259.  
  260.     //TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
  261.     //::PBFlushVolSync( (ParmBlkPtr) theVInfo );
  262.  
  263.     return err;
  264. }
  265.  
  266. // end of program
  267.